package base.thread;

public class SynchronizedThisDemo {
    public void synThisMethod() {
        //当一个线程访问object的一个synchronized(this)同步代码块时，
        // 另一个线程仍然可以访问该object中的非synchronized(this)同步代码块。
        synchronized (this) {
            int i = 5;
            while (i-- > 0) {
                System.out.println("synThisMethod           " + Thread.currentThread().getName() + " : " + i);
                try {
                    Thread.sleep(500);
                } catch (InterruptedException ie) {
                }
            }
        }

    }

    public void sleepSub() {
        int i = 5;
//        synchronized (this) {     //
//        }

        while (i-- > 0) {
            System.out.println("sleepSub               " + Thread.currentThread().getName() + " : " + i);
            try {
                Thread.sleep(500);
            } catch (InterruptedException ie) {
            }
        }

    }


    public static void main(String[] args) {
        final SynchronizedThisDemo myt2 = new SynchronizedThisDemo();
        Thread t1 = new Thread(new Runnable() {
            public void run() {
                myt2.synThisMethod();
            }
        }, "t1");
        Thread t2 = new Thread(new Runnable() {
            public void run() {
                myt2.sleepSub();//可执行
            }
        }, "t2");
        t1.start();
        t2.start();
    }


}
